/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.its.dsw2.biblioteca.bl;

import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.its.dsw2.biblioteca.dao.DetallePrestamoDaoLocal;
import mx.its.dsw2.biblioteca.dao.PrestamoDaoLocal;
import mx.its.dsw2.biblioteca.enumeracion.EstadoDetallePrestamo;
import mx.its.dsw2.biblioteca.enumeracion.EstatusTransaccion;
import mx.its.dsw2.biblioteca.modelo.DetallePrestamo;
import mx.its.dsw2.biblioteca.modelo.Libro;
import mx.its.dsw2.biblioteca.modelo.Prestamo;
import mx.its.dsw2.biblioteca.modelo.Usuario;

/**
 *
 * @author Juan Carlos
 */
@Stateless
public class PrestamoBl implements PrestamoBlLocal {
    @EJB
    private DetallePrestamoDaoLocal detallePrestamoDao;
    @EJB
    private PrestamoDaoLocal prestamoDao;

    @Override
    public EstatusTransaccion register(Prestamo lend, List<Libro> listaLibros) {
        int available = 3;
        List<Prestamo> incompleteLend = prestamoDao.findIncomplete(lend.getIdUsuario());
        
        for (Prestamo prestamo : incompleteLend) {
            available = available - detallePrestamoDao.findLends(prestamo).size();
        }
        if (available <= 0 || listaLibros.size() > available || lend.getIdUsuario() == null || listaLibros.size() <=0) {
            return EstatusTransaccion.INCOMPLETO;
        
        }else{
            //fecha
            Date fecha = new Date();
            Time hora = new Time(fecha.getTime());
            
            //SimpleDateFormat formatDate = new SimpleDateFormat("dd/MM/YY");// esto sirve para darle ponerle fecha a la hora de sacarlo a pantalla
            
            for (Libro book : listaLibros) {
                DetallePrestamo dp = new DetallePrestamo();
                dp.setIdLibro(book);
                dp.setIdPrestamo(lend);
                lend.setFecha(fecha);
                lend.setHora(hora);
                dp.setEstado(EstadoDetallePrestamo.PRESTADO.ordinal());
                prestamoDao.create(lend);
            }
            return EstatusTransaccion.COMPLETO;
            
        }
        
    }

    
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    @Override
    public EstatusTransaccion takeBack(List<Libro> books) {
        for (Libro book : books) {
            DetallePrestamo dp = detallePrestamoDao.findBooks(book);
            if (dp == null) {
                return  EstatusTransaccion.INCOMPLETO;
            }else{
                dp.setEstado(EstadoDetallePrestamo.PRESTADO.ordinal());
                detallePrestamoDao.edit(dp);
                
            }
        }
        return null;
    }

}
